package br.com.sgpv2.hibernate.departamento;

import java.util.List;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.organograma.Departamento;
import br.com.sgpv2.entity.pessoa.Contrato;

public interface DepartamentoRepository {
	/**
	 * Método que salva um departamento no sistema.
	 */
	void salvar(Departamento departamento);

	/**
	 * Método que busca um Departamento no sistema.
	 */
	Departamento buscar(Integer pk) throws NegocioExeception;

	/**
	 * Método que altera um Departamento no sistema.
	 */
	void alterar(Departamento departamento);

	/**
	 * Método que lista todos os Departamentos do sistema.
	 */
	List<Departamento> listar();

	/**
	 * Método que exclui um Departamento do sistema.
	 */
	void excluir(Departamento departamento);
	
	/**
	 * Método que retorna todos os contratos de um determinado departamento.
	 */
	List<Contrato> listarContratosPorDepartamento(int idDepartamento);
	
	/**
	 * Método retorna todas os Departamentos ordenadas pelo atributo informado.
	 * @param atributoOrder
	 * @return
	 */
	List<Departamento> listarOrder(String atributoOrder);
	
	/**
	 * Método retorna os departamentos que possuem a descricao informada.
	 * @param descricao
	 * @return
	 */
	List<Departamento> consultarPorDescricao(String descricao);
	
}
